import { isArray, isNumber, isString, orderBy } from "lodash-es";
export const formatPast = (date, type = "default", zeroFillFlag = true) => {
  // 定义countTime变量，用于存储计算后的数据
  let countTime;
  // 获取当前时间戳
  let time = new Date().getTime();
  // 转换传入参数为时间戳
  let afferentTime = new Date(date).getTime();
  // 当前时间戳 - 传入时间戳
  time = Number.parseInt(`${time - afferentTime}`);
  if (time < 10000) {
    // 10秒内
    return "刚刚";
  } else if (time < 60000) {
    // 超过10秒少于1分钟内
    countTime = Math.floor(time / 1000);
    return `${countTime}秒前`;
  } else if (time < 3600000) {
    // 超过1分钟少于1小时
    countTime = Math.floor(time / 60000);
    return `${countTime}分钟前`;
  } else if (time < 86400000) {
    // 超过1小时少于24小时
    countTime = Math.floor(time / 3600000);
    return `${countTime}小时前`;
  } else if (time >= 86400000 && type == "default") {
    // 超过二十四小时（一天）且格式参数为默认"default"
    countTime = Math.floor(time / 86400000);
    //大于等于365天
    if (countTime >= 365) {
      return `${Math.floor(countTime / 365)}年前`;
    }
    //大于等于30天
    if (countTime >= 30) {
      return `${Math.floor(countTime / 30)}个月前`;
    }
    return `${countTime}天前`;
  } else {
    // 一天（24小时）以上且格式不为"default"则按传入格式参数显示不同格式
    // 数字补零
    let Y = new Date(date).getFullYear();
    let M = new Date(date).getMonth() + 1;
    let zeroFillM = M > 9 ? M : "0" + M;
    let D = new Date(date).getDate();
    let zeroFillD = D > 9 ? D : "0" + D;
    // 传入格式为"-" "/" "."
    if (type == "-" || type == "/" || type == ".") {
      return zeroFillFlag
        ? Y + type + zeroFillM + type + zeroFillD
        : Y + type + M + type + D;
    }
    // 传入格式为"年月日"
    if (type == "年月日") {
      return zeroFillFlag
        ? Y + type[0] + zeroFillM + type[1] + zeroFillD + type[2]
        : Y + type[0] + M + type[1] + D + type[2];
    }
    // 传入格式为"月日"
    if (type == "月日") {
      return zeroFillFlag
        ? zeroFillM + type[0] + zeroFillD + type[1]
        : M + type[0] + D + type[1];
    }
    // 传入格式为"年"
    if (type == "年") {
      return Y + type;
    }
  }
};
export function convertSize(limit) {
  if (!limit) return "--";
  var size = "";
  if (limit < 0.1 * 1024) {
    //小于0.1KB，则转化成B
    size = limit.toFixed(2) + "B";
  } else if (limit < 0.1 * 1024 * 1024) {
    //小于0.1MB，则转化成KB
    size = (limit / 1024).toFixed(2) + "KB";
  } else if (limit < 0.1 * 1024 * 1024 * 1024) {
    //小于0.1GB，则转化成MB
    size = (limit / (1024 * 1024)).toFixed(2) + "MB";
  } else {
    //其他转化成GB
    size = (limit / (1024 * 1024 * 1024)).toFixed(2) + "GB";
  }

  var sizeStr = size + ""; //转成字符串
  var index = sizeStr.indexOf("."); //获取小数点处的索引
  var dou = sizeStr.substr(index + 1, 2); //获取小数点后两位的值
  if (dou == "00") {
    //判断后两位是否为00，如果是则删除00
    return sizeStr.substring(0, index) + sizeStr.substr(index + 3, 2);
  }
  return size;
}
export function downloadObjectAsJson(exportObj, exportName) {
  const dataStr =
    "data:text/json;charset=utf-8," +
    encodeURIComponent(JSON.stringify(exportObj));
  const downloadAnchorNode = document.createElement("a");
  downloadAnchorNode.setAttribute("href", dataStr);
  downloadAnchorNode.setAttribute("download", exportName + ".json");
  document.body.appendChild(downloadAnchorNode); // required for firefox
  downloadAnchorNode.click();
  downloadAnchorNode.remove();
}

export function importJson() {
  return new Promise((resolve, reject) => {
    // 创建一个隐藏的文件输入元素
    var fileInput = document.createElement("input");
    fileInput.type = "file";
    fileInput.accept = ".json"; // 限制只能选择JSON文件
    fileInput.style.display = "none"; // 隐藏文件输入元素

    // 添加change事件监听器来处理文件选择
    fileInput.addEventListener("change", function (event) {
      //@ts-ignore
      var file = event.target.files[0];
      if (!file) {
        // return;
        reject("文件未发现");
      }

      // 使用FileReader读取文件内容
      var reader = new FileReader();
      reader.onload = function (e) {
        var contents = e.target.result as string;
        try {
          const json = JSON.parse(contents);
          // return json;
          resolve(json);
          // 处理JSON数据
          // console.log(json);
          // 例如：显示JSON在控制台
        } catch (error) {
          console.error("Error parsing JSON:", error);
          reject("传入的文件非法");
        }
      };

      reader.onerror = function () {
        console.error("Error reading file");
      };

      // 读取文件为文本
      reader.readAsText(file);
    });

    // 将文件输入元素添加到文档中（必须添加到DOM中才能触发点击事件）
    document.body.appendChild(fileInput);

    // 程序触发文件输入的点击事件，打开文件选择对话框
    fileInput.click();

    // 在选择文件后，可以从DOM中移除文件输入元素
    fileInput.remove();
  });
}
// 列表转树形
export function deepTree(list: any[], sort?: "desc" | "asc"): any[] {
  const newList: any[] = [];
  const map: any = {};

  orderBy(list, "orderNum", sort)
    .map((e) => {
      map[e.id] = e;
      return e;
    })
    .forEach((e) => {
      const parent = map[e.parentId];

      if (parent) {
        (parent.children || (parent.children = [])).push(e);
      } else {
        newList.push(e);
      }
    });

  return newList;
}

// 树形转列表
export function revDeepTree(list: any[]) {
  const arr: any[] = [];
  let id = 0;

  function deep(list: any[], parentId: number) {
    list.forEach((e) => {
      if (!e.id) {
        e.id = ++id;
      }

      if (!e.parentId) {
        e.parentId = parentId;
      }

      arr.push(e);

      if (e.children && isArray(e.children) && e.id) {
        deep(e.children, e.id);
      }
    });
  }

  deep(list || [], 0);

  return arr;
}
